package gui;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

/**
 * @author Timi
 * 
 */

public class SejtAutomataHelp extends JFrame implements ItemListener {

	private static final long serialVersionUID = 1L;
	Container contentPane;
	JComboBox titles;
	JTextPane text;

	public SejtAutomataHelp() {
		this.setTitle("Sugó");

		contentPane = getContentPane();
		contentPane.setLayout(new BorderLayout());

		// titles
		titles = new JComboBox();
		titles.addItem(describeTitle());
		titles.addItem(ruleTitle());
		titles.addItem(dataTitle());
		titles.addItem(playTitle());
		titles.addItem(saveTitle());
		titles.addItem(optionsTitle());
		titles.setSelectedIndex(0);
		titles.addItemListener(this);
		contentPane.add(titles, BorderLayout.NORTH);

		// texts
		Font font = new Font("Bookman Old Style", Font.PLAIN, 12);
		text = new JTextPane();
		text.setFont(font);
		text.setText(describe());
		contentPane.add(text, BorderLayout.CENTER);
		JScrollPane sp = new JScrollPane(text);
		this.getContentPane().add(sp);

	}

	private String optionsTitle() {
		return "Beállítások";
	}

	private String options() {
		// select dimension, periodic, color
		return "Opciók -> Periodikus \nA kocka szélén lévő játékosok szomszédjaiknak tekintik az ellenkező oldalon lévő játékosokat.\n\n"
				+ "Opciók -> Két szín \nA kockában a defektáló ágensek kék színű körökkel vannak jelölve. Ha ez az opció nincs kijelölve, akkor fekete pont jelzi őket.\n\n"
				+ "Nézet -> \nKiválasztható, hogy a kétdimenziós vagy háromdimenziós szimulációt szeretnénk használni.\n";
	}

	private String saveTitle() {
		return "Mentés";
	}

	private String save() {
		// save image, save statistic
		return "Fájl -> Kép mentése \nA kocka képét menti ki eps formátumba. A képen a kocka olyan állapotban lesz, ahogy a képernyőn volt, mikor a mentést megnyomtuk.\n\n"
				+ "Fájl -> Statisztika mentése \nA jelenlegi játék, eddig lejátszott köreinek az adatait menti ki txt formátumba. A szöveges fájlban megjelenik a C, D és az F értéke.";
	}

	private String playTitle() {
		return "Szimuláció";
	}

	private String play() {
		// start, stop, rotate cube
		return "1. Indítás \n A Start gomb lenyomásával lehet a szimulációt (újra)indítani.\n\n" + "2. Szünet \n A Stop gombbal meg lehet állítani a futó szimulációt.\n\n"
				+ "3. Forgatás \n A kockát az egérrel lehet forgatni bármilyen irányba.\n\n";
	}

	private String dataTitle() {
		return "Adatok megadása";
	}

	private String data() {
		// insert data
		return "A szimuláció elindításához meg kell adni a szükséges értékeket.\n\n" + "- generáció szám (max 500)\n" + "- kocka méret (min 3, max 25)\n"
				+ "- R, S, T, P a szimulácó alatt az ágensek ilyen pontszámokat kaphatnak( valós számok, két tizedes pontossággal ábrázoljuk, a maximum érték 100; P < S < R < T és T + S < 2R)\n"
				+ "- a szabályt, ami szerint játszunk\n\n" + "Ha a szabály szerint a játékhoz szükséges még egy paraméter, akkor azt az Szp mezőben kell meg adni.";
	}

	private String describeTitle() {
		return "Leírás";
	}

	private String describe() {
		// describe the simulation
		return "A sejtautomata egy szimulációs felület, mely a játékosok kooperációját és annak körülményeit vizsgálja. "
				+ "A szomszédos ágensek egymással „játszanak” a fogolydilemma szabályai alapján. ";
	}

	public String ruleTitle() {
		return "Szabályok";
	}

	public String rule() {
		// specifies the rules
		return "1. szabály \n"
				+ "Az ágensek véletlenszerűen vannak inicializálva. A játékosok a fogolydilemma alapján sorban játszanak szomszédokkal. Minden kör után a játékosok megnézik a szomszédjaik nyereségét."
				+ "Ha valamelyik szomszédnak a nyeresége nagyobb, mint az övé, akkor átveszi az ő stratégiáját. \n\n"
				+ "2. szabszabály \n"
				+ "A felületen meg van adva egy szám, ami azt jelöli, hogy a kezdeti állapotban hány játékos deffektál. "
				+ "A játék a fogolydilemma alapján folytatódik tovább. Vagyis az első kör után változhat a stratégiájuk, ha valamelyik szomszéd nyeresége nagyobb.\n\n"
				+ "3. szabszabály \n"
				+ "A felületen megadott egy szám jelöli azt, hogy az ágensek között hány olyan van, aki nem a fogolydilemma szerint dönti el, hogy mi lesz a következő körben a stratégiája, hanem randomra választ minden körben.\n\n"
				+ "4. szabszabály \n"
				+ "A felületen meg van adva egy szám, ami azt jelöli, hogy hány ágens nem változtat stratégiát a játék folyamán. Vagyis a fogolydilemma eredményétől függetlenül, kitart a saját stratégiája mellett.";
	}

	public static String about() {
		// about
		return " Sejtautomata\n Készítette Püsök Beáta, Szél Gabriella, Szilágyi Timea. \n";
	}

	public void itemStateChanged(ItemEvent e) {
		if (titles.getSelectedItem().equals(describeTitle())) {
			text.setText(describe());
		} else if (titles.getSelectedItem().equals(ruleTitle())) {
			text.setText(rule());
		} else if (titles.getSelectedItem().equals(dataTitle())) {
			text.setText(data());
		} else if (titles.getSelectedItem().equals(playTitle())) {
			text.setText(play());
		} else if (titles.getSelectedItem().equals(saveTitle())) {
			text.setText(save());
		} else if (titles.getSelectedItem().equals(optionsTitle())) {
			text.setText(options());
		}
	}
}
